/*
 * Server.h
 *
 */

#ifndef SERVER_H_
#define SERVER_H_

#include "ClientHandler.h"
#include "../common/Thread.h"
#include "../common/LogFile.h"
#include "../common/Socket.h"
#include "../common/ServerConfig.h"

class Server : public Thread {
	private:
		ServerSocket acceptor;
		const ServerConfig& config;
		LogFile& logFile;
		ClientHandler clientHandler;
	public:
		Server(const ServerConfig& config, LogFile& logFile);
		virtual ~Server();

		/** Arranca al servidor
		 * @throw ThreadException En caso que no pueda iniciarse
		 */
		void start();

		/**
		 * Detiene al servidor previamente iniciado con start()
		 */
		void shutdown();
	protected:
		/**
		 * Método a ejecutarse por el hilo del server
		 */
		void run();
};

#endif /* SERVER_H_ */
